/*
 * Copyright (c) 2013 UCE (Universidad Central del Ecuador), todos los derechos
 * reservados. Este software es confidencial y su informacion es propiedad de
 * UCE (Universidad Central del Ecuador). No debe revelar tal informacion y debe usarla
 * unicamente de acorde con los terminos de uso.
 */
package ec.linde.persistencia.entidades.proyectos;

import java.io.Serializable;

import javax.persistence.MappedSuperclass;
import javax.persistence.Transient;

/**
 * TODO: Agregar descripcion
 * 
 * @FechaCreacion: 29/03/2013
 * @author: Alex Carrillo
 * @FechaModificacion: 29/03/2013
 * @author: Alex Carrillo
 * @version: 1.0
 */
@MappedSuperclass
public abstract class EntidadBase implements Serializable {

	private static final long serialVersionUID = -4493183957890075592L;

	@Transient
	protected int id;

	@Transient
	protected int idHashCode;

	/**
	 * Por defecto todas las endidades son auditables Para que una entidad no se auditable sobrescribir la propiedad
	 */
	@Transient
	private boolean editado = false;

	/**
	 * Bandera que indica si el registro fue eliminado
	 */
	@Transient
	protected boolean eliminado = false;

	/**
	 * Get del atributo serialversionuid
	 * 
	 * @return el valor del atributo serialversionuid
	 */
	public static long getSerialversionuid() {
		return serialVersionUID;
	}

	/**
	 * Get del atributo id
	 * 
	 * @return el valor del atributo id
	 */
	public int getId() {
		return id;
	}

	/**
	 * Set del atributo id
	 * 
	 * @param id
	 *            valor para asignar al atributo id
	 */
	public void setId(int id) {
		this.id = id;
	}

	/**
	 * Get del atributo editado
	 * 
	 * @return el valor del atributo editado
	 */
	public boolean isEditado() {
		return editado;
	}

	/**
	 * Set del atributo editado
	 * 
	 * @param editado
	 *            valor para asignar al atributo editado
	 */
	public void setEditado(boolean editado) {
		this.editado = editado;
	}

	/**
	 * Get del atributo eliminado
	 * 
	 * @return el valor del atributo eliminado
	 */
	public boolean isEliminado() {
		return eliminado;
	}

	/**
	 * Set del atributo eliminado
	 * 
	 * @param eliminado
	 *            valor para asignar al atributo eliminado
	 */
	public void setEliminado(boolean eliminado) {
		this.eliminado = eliminado;
	}

	@Override
	public boolean equals(Object entidad) {

		if (this == entidad) {
			return true;

		} else {
			return (entidad instanceof EntidadBase) ? getId() == ((EntidadBase) entidad).getId() : false;
		}
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see java.lang.Object#hashCode()
	 */
	@Override
	public int hashCode() {
		return getId() > 0 ? getId() : super.hashCode();
	}

	public int getRowKey() {
		return getId() > 0 ? getId() : super.hashCode();
	}

	public int getIdHashCode() {
		return hashCode();
	}

}
